package com.winit.openapi.tp.manager;

import java.util.Comparator;
import java.util.Date;

import com.winit.openapi.tp.bo.TrackingVo;


/**
 * 轨迹列表结果排序
 * 
 * <pre>
 * 根据轨迹中最新的时间排序，轨迹中最后一条时间为最新时间
 * </pre>
 * 
 * @version <pre>
 * Author	Version		Date		Changes
 * liang.lu 	1.0  		Apr 10, 2015 	Created
 * 
 * </pre>
 * @since 1.
 */
public class TrackingComparetor implements Comparator<TrackingVo> {

    @Override
    public int compare(com.winit.openapi.tp.bo.TrackingVo o1, com.winit.openapi.tp.bo.TrackingVo o2) {
        System.setProperty("java.util.Arrays.useLegacyMergeSort", "true");
        if (null != o1 && null != o2) {
            Date o1d = getLatestTraceDate(o1);
            Date o2d = getLatestTraceDate(o2);
            if (null != o1d && null != o2d) {
                return o1d.compareTo(o2d) < 0 ? -1 : 1;
            } else if (null != o1d) {
                return -1;
            } else if (null != o2d) {
                return 1;
            }
        }else if( null != o2){
            return 1;
        }else if(null != o1){
            return -1;
        }
        return 0;
    }

    /**
     * 返回轨迹的最新时间
     * 
     * @return
     */
    private Date getLatestTraceDate(TrackingVo o) {
        if (null == o.getTrace()) {
            return null;
        }
        int len = o.getTrace().size();
        if (len > 0) {
            return o.getTrace().get(len - 1).getDate();
        } else {
            return null;
        }
    }
}
